﻿//
// Created by LiuYou on 2021/8/12.
//



#include <stdio.h>
#include <stdlib.h>
//#include "Main.h"



/**
 * 对extern的思考。
 *
 * 现在我将之前的在 Main.c中的 extern显式声明函数放到了 Main.h头文件中。然后让 Main.c含入头文件 Main.h。
 * 当然运行结果是没有问题的。
 *
 * 然后我在 Main.c中不含入/导入头文件 Main.h, 而是含入 stdio.h 和 stdlib.h 这两个头文件。这个两个是 Main.c中使用到
 * 的库函数所在的头文件。然后编译运行也是没有问题的。而且这种方式也是广为使用库函数的一种方式。
 *
 * 这个时候我想到这两种方式有区别吗?
 * 下面的注释指出的这种区别:
 *
 * 含入 Main.h 的 Main.c.o 文件大小为 3432。
 * 而含入 stdio.h 和 stdlib.h 编译生成的 Main.c.o 文件大小为 6184。几乎大了一倍。而且这是标准库函数, 无数人修修订订的成果。
 * 如果是别人写的库(如果写库的人没有注意考虑生成 *.o 文件的大小的话)那么生成的 *.o 文件可能确实要大很多。
 * 所以使用标准库的库函数的时候, 就直接含入头文件就可以了。没有必要在 Main.h中 extern显式声明这些库函数这种方式。
 *
 * 其实任意c/c++程序都是实现文件编译生成 *.o文件, 然后链接器再链接这些 *.o(一些 *.o文件是自己写的, 一些 *.o文件是使用到的标准库的内容)。
 *
 * 好了, 现在还有一个问题是 extern。详情见3。
 */
/*
[liuyou@localhost use-of-library-functions-2.dir]$ ll
total 44
-rw-rw-r--. 1 liuyou liuyou 6405 Aug 12 15:07 build.make
-rw-rw-r--. 1 liuyou liuyou  402 Aug 12 15:11 C.includecache
-rw-rw-r--. 1 liuyou liuyou  314 Aug 12 15:08 cmake_clean.cmake
-rw-rw-r--. 1 liuyou liuyou  681 Aug 12 15:07 DependInfo.cmake
-rw-rw-r--. 1 liuyou liuyou  351 Aug 12 15:11 depend.internal
-rw-rw-r--. 1 liuyou liuyou  377 Aug 12 15:11 depend.make
-rw-rw-r--. 1 liuyou liuyou  183 Aug 12 15:07 flags.make
-rw-rw-r--. 1 liuyou liuyou   97 Aug 12 15:07 link.txt
-rw-rw-r--. 1 liuyou liuyou 3432 Aug 12 15:11 Main.c.o
-rw-rw-r--. 1 liuyou liuyou   45 Aug 12 15:08 progress.make
[liuyou@localhost use-of-library-functions-2.dir]$ ll
total 48
-rw-rw-r--. 1 liuyou liuyou 6405 Aug 12 15:07 build.make
-rw-rw-r--. 1 liuyou liuyou  255 Aug 12 15:13 C.includecache
-rw-rw-r--. 1 liuyou liuyou  314 Aug 12 15:08 cmake_clean.cmake
-rw-rw-r--. 1 liuyou liuyou  681 Aug 12 15:07 DependInfo.cmake
-rw-rw-r--. 1 liuyou liuyou  270 Aug 12 15:13 depend.internal
-rw-rw-r--. 1 liuyou liuyou  239 Aug 12 15:13 depend.make
-rw-rw-r--. 1 liuyou liuyou  183 Aug 12 15:07 flags.make
-rw-rw-r--. 1 liuyou liuyou   97 Aug 12 15:07 link.txt
-rw-rw-r--. 1 liuyou liuyou 6184 Aug 12 15:13 Main.c.o
-rw-rw-r--. 1 liuyou liuyou   45 Aug 12 15:08 progress.make

我又测试了一下之前的 use-of-library-functions 生成的 Main.c.o 文件的大小: 3424, 别含入头文件 Main.h的 3432差不多。

[liuyou@localhost use-of-library-functions.dir]$ ll
total 44
-rw-rw-r--. 1 liuyou liuyou 6263 Aug 12 14:34 build.make
-rw-rw-r--. 1 liuyou liuyou  232 Aug 12 15:29 C.includecache
-rw-rw-r--. 1 liuyou liuyou  306 Aug 12 15:08 cmake_clean.cmake
-rw-rw-r--. 1 liuyou liuyou  675 Aug 12 14:34 DependInfo.cmake
-rw-rw-r--. 1 liuyou liuyou  264 Aug 12 15:29 depend.internal
-rw-rw-r--. 1 liuyou liuyou  233 Aug 12 15:29 depend.make
-rw-rw-r--. 1 liuyou liuyou  183 Aug 12 14:34 flags.make
-rw-rw-r--. 1 liuyou liuyou   93 Aug 12 14:34 link.txt
-rw-rw-r--. 1 liuyou liuyou 3424 Aug 12 15:31 Main.c.o
-rw-rw-r--. 1 liuyou liuyou   45 Aug 12 15:08 progress.make

 */
int main(int arc, char** argv) {
    char str[] = {"666"};
    printf( "%d", atoi( str ));


    return 0;
}